package JZOffer;

/**
 * @author Lw中
 * @date 2021/8/30 21:56
 */
public class Jz58 {

    // Jz58 - I. 翻转单词顺序

    public String reverseWords(String s) {
        // 方法一：分割+逆序
//        // 将字符串首尾部的空格去除
//        s.trim();
//        // 将字符串通过split方法切割成一个一个单词
//        String[] s1 = s.split(" ");
//        // 创建StringBuffer类用于逆序连接一个个单词
//        StringBuffer stringBuffer = new StringBuffer();
//        for (int i = s1.length - 1; i >= 0 ; i--) {
//            // 判断s1是否为空格组成的
//            if (!s1[i].trim().isEmpty()) {
//                // 每个单词使用“ ”间隔开
//                stringBuffer.append(s1[i] + " ");
//            }
//        }
//        return stringBuffer.toString().trim();

        // 方法二：双指针
        s.trim();
        int j = s.length() - 1, i = j;
        StringBuilder stringBuilder = new StringBuilder();
        while (i >= 0) {
            while (i >= 0 && s.charAt(i) != ' ') i--; //寻找第一个空格
            // 截取字符串中的单词，因为substring的参数规则最后一个字符的位置需要加一
            stringBuilder.append(s.substring(i + 1, j + 1) + " ");
            while (i >= 0 && s.charAt(i) == ' ') i--; // 寻找下一个单词开头
            j = i;
        }
        return stringBuilder.toString().trim();
    }

}
